sed命令 功能
a\ 在当前行后添加一行或多行。多行时除最后一行外,每行末尾需用“\”续行
c\ 用此符号后的新文本替换当前行中的文本。多行时除最后一行外,每行末尾需用"\"续行
i\ 在当前行之前插入文本。多行时除最后一行外,每行末尾需用"\"续行
d 删除行
h 把模式空间里的内容复制到暂存缓冲区
H 把模式空间里的内容追加到暂存缓冲区
g 把暂存缓冲区里的内容复制到模式空间,覆盖原有的内容
G 把暂存缓冲区的内容追加到模式空间里,追加在原有内容的后面
l 列出非打印字符
p 打印行
n 读入下一输入行,并从下一条命令而不是第一条命令开始对其的处理
r 从文件中读取输入行
! 对所选行以外的所有行应用命令
s 用一个字符串替换另一个
g 在行内进行全局替换
w 将所选的行写入文件
x 交换暂存缓冲区与模式空间的内容
y 将字符替换为另一字符(不能对正则表达式使用y命令)
q 结束或退出sed
sed选项 功能
e 进行多项编辑,即对输入行应用多条sed命令时使用
-n 取消默认的输出
-f 指定sed脚本的文件名

常用实例

1、匹配范围

#行号范围:打印第3行到第5行
sed -n '3,5p' filename

\#正则表达式匹配范围:从匹配start\_pattern的行开始,到匹配end\_pattern的行结束
sed -n '/start\_pattern/,/end\_pattern/p' filename

\#命令组合:从第1行开始,到第一个空白行为止
sed -n '1,/^\$/p' filename

\#倒数行范围:从第1行开始,直到匹配end\_pattern的行之前(使用!进行取反)
sed -n '1,/end\_pattern/!p' filename

\#指定行的倍数:打印所有奇数行(从第一行开始,步长为 2)
sed -n '1\~2p' filename

2、基础替换

#只替换文本中第一次出现的匹配项,并将结果输出到标准输出
sed 's/foo/bar/' filename

#只替换每行中第三次出现的匹配项
sed 's/foo/bar/3' filename

#只打印替换过的行
sed -n 's/foo/bar/p' filename

#编辑原文件,同时创建 filename.bak 备份
sed -i.bak 's/foo/bar/' filename

#忽略大小写进行替换
sed 's/foo/bar/i' filename

#全局替换
sed 's/foo/bar/g' filename

#全局替换,每行替换从第 2 次开始出现的匹配项
sed 's/foo/bar/2g' filename

3、组合替换

#替换并写入新文件:将替换过的行写入 output.txt
sed 's/foo/bar/w output.txt' filename

#结合标记符:在匹配的字符串后添加后缀
sed 's/foo/&.bak/' filename

#执行sed结果的命令(谨慎使用,可能导致安全风险)
sed 's/systemctl start/systemctl status/e' filename
echo "ls /tmp" | sed 's/ls/ls -l/e'

#行号范围:将第3行到第5行中的"foo"替换为"bar"
sed '3,5s/foo/bar/g' filename

#正则表达式匹配范围:从包含"start"的行开始,到包含"end"的行结束,替换"foo"为"bar"
sed '/start/,/end/s/foo/bar/g' filename

#命令组合:从第1行开始,到第一个空白行为止,替换"foo"为"bar"
sed '1,/^$/s/foo/bar/g' filename

#倒数行范围:从第1行开始,直到包含"end"的行之前,替换"foo"为"bar"
sed '1,/end/!s/foo/bar/g' filename

#指定行的倍数:替换所有奇数行中的"foo"为"bar"
sed '1~2s/foo/bar/g' filename

4、更新操作(a\i\c\)

a,i,c\分别表示在行下追加、行上插入和整行更新,字母符号后面\可以省略

行下追加(a\)

#将 "this is a test line" 追加到含有 "hello" 行的下面
sed -i '/hello/a\this is a test line' filename

#在第 2 行之后插入 "this is a test line"
sed -i '2a\this is a test line' filename

行上插入(i\)

#将 "this is a test line" 插入到含有 "librarookie" 的行上面
sed -i '/librarookie/i\this is a test line' filename

#在第 5 行之前插入 "this is a test line"
sed -i '5i\this is a test line' filename

替换当前行(c\)

#将含有 "librarookie" 的行变成 "this is a test line"
sed -i '/librarookie/c\this is a test line' filename

#将第 5 行变成 "this is a test line"
sed -i '3c\this is a test line' filename

删除操作(d)

#删除全文
sed -i 'd' filename

#删除第 2 行
sed -i '2d' filename

#删除最后一行
sed -i '$d' filename

#删除空白行
sed -i '/^$/d' filename

#以 # 号开头的行(删除注释)
sed -i '/^#/d' filename

#删除文件中所有开头是 test的行
sed -i '/^test/d' filename

#删除文件的第 2 行到 末尾所有行
sed -i '2,$d' filename
Copyright © https://yan-jian.com 2023 all right reserved更新时间: 2024-11-20 18:37:40

results matching ""

    No results matching ""